#include "stm32f10x.h"                  // Device header
#include "Delay.h"

#define LED 0x00FF
#define LED_PORT GPIOA

uint8_t  code[] = {0xFE, 0xFD, 0xFB, 0xF7, 0XEF, 0XDF, 0XBF, 0X7F};

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	
	
	GPIO_InitTypeDef GPIO_InitStructure;	//定义结构体
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出 （高低电平都有输出能力）
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出 (低电平有输出能力)
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;		//可以用按位或操作，同时设置多个引脚
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;	//上一行的接续，用Pin_All，设置16个引脚，，也可以用上边那一行设置0-7引脚
	GPIO_InitStructure.GPIO_Pin = LED;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;	
	//GPIOA 0号引脚 推挽输出 2MHz
	
	GPIO_Init(LED_PORT, &GPIO_InitStructure);
	
//	GPIO_ResetBits(GPIOA, GPIO_Pin_0);	//点亮一个LED
//	GPIO_SetBits(GPIOA, GPIO_Pin_0);		//熄灭LED
//	GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//Bit_RESET清楚端口值，置低电平
//	GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);	//Bit_SET  设置端口值，置高电平
	
	unsigned char i =0;
	
	while(1)
	{
		//写法1（数组）
//		for(uint8_t i = 0; i < 8; i ++)
//		{
//			GPIO_Write(LED_PORT, code[i]);	//直接把数组写入
//			Delay_ms(80);
//		}
//		for(uint8_t i = 7; i > 0; i --)	//反着流回来
//		{
//			GPIO_Write(LED_PORT, code[i]);	
//			Delay_ms(100);
//		}
		
		//写法2
		for(i=0;i<8;i++)						//用for循环 左移操作，实现循环点灯
		{
			GPIO_Write(GPIOA, ~(0x0001<<i));	//0000 0000 0000 0001  ，低电平点亮，所以取反，只点亮第一个LED
			Delay_ms(200);
		}
		for(i=0;i<8;i++)
		{
			GPIO_Write(GPIOA, ~(0x0080>>i));	//0000 0000 0000 0001  ，低电平点亮，所以取反，只点亮第一个LED
			Delay_ms(100);
		}
		//写法3，笨方法~
//		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001  ，低电平点亮，所以取反，只点亮第一个LED
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010  
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100  
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000  
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000  
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000  
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000  
//		Delay_ms(500);
//		GPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000  
//		Delay_ms(500);

	}
}

